/*
 * @ModuleName: 观察者模式 - 主题
 * @Author: zhuzhaofeng
 * @Date: 2020-05-09 11:35:35
 * @Description： 保存状态, 状态变化之后触发所有的观察者对象
 */

import ObServer from "./Observer";
class Subjcet {
  state: number;
  observers: Array<ObServer>;
  constructor() {
    this.state = 0;
    this.observers = [];
  }
  /**
   * @description: 获取状态
   * @return: 状态值
   */
  getState(): number {
    return this.state;
  }
  /**
   * @description: 设置状态 设置完成之后触发所有的观察者对象
   * @param { number } 需要设置的状态值
   */
  setState(state: number): void {
    this.state = state;
    this.notifyAllObservers();
  }

  /**
   * @description: 触发所有的观察者对象
   */
  notifyAllObservers(): void {
    this.observers.forEach((observer) => {
      observer.update()
    });
  }
  /**
   * @description: 观察者数组中添加一个ObServer
   * @param observer 
   */
  attach(observer: ObServer) {
    this.observers.push(observer);
  }
}

export default Subjcet;